Subject: Editor's draft DLSw spec. (6 of 8)

From: "Alan K. Bartky, Manager of Technology" <[email-masked]>
Date: Mon, 11 Jul 94 13:41:25 PDT

----------
X-Sun-Data-Type: text
X-Sun-Data-Description: text
X-Sun-Data-Name: text
X-Sun-Content-Lines: 1
X-Sun-Content-Length: 21

Here is part 6 of 8.

----------
X-Sun-Data-Type: default
X-Sun-Data-Description: default
X-Sun-Data-Name: dlsw6.txt
X-Sun-Content-Lines: 478
X-Sun-Content-Length: 24842

RFC XXXX      DLSw: Switch-to-Switch Protocol                June 1994

   The CANUREACH_ex, ICANREACH_ex, NETBIOS_NQ_ex, and NETBIOS_NR_ex are SSP
   messages that are not associated with a particular circuit.  The processing of
   these messages is covered by the following table:

   3  +-----------------------+-------------------------------------------+
   3  |        Event          |                  Action(s)                |
   3  +-----------------------+-------------------------------------------+
   3  | Receive CANUREACH_ex  | Respond with ICANREACH_ex if it is known  |
   3  |                       | that the destination MAC address can be   |
   3  |                       | reached.  This can be determined using    |
   3  |                       | cached information or using a             |
   3  |                       | TEST command/TEST response exchange.      |
   3  +-----------------------+-------------------------------------------+
   3  | Receive NETBIOS_NQ_ex | Respond with NETBIOS_NR_ex is it is known |
   3  |                       | that the destination NETBIOS name can be  |
   3  |                       | reached, else send a NETBIOS NAME_QUERY   |
   3  |                       | using the name contained in the SSP       |
      |                       | message.  If a corresponding NETBIOS      |
   3  |                       | NETBIOS NAME_RECOGNIZED is received,      |
   3  |                       | send it back in a NETBIOS_NR_ex to the    |
   3  |                       | originator of the NETBIOS_NQ_ex.          |
   3  +-----------------------+-------------------------------------------+

4.2.2.1 DISCONNECTED State

A.K. Bartky                                                  [Page 48]RFC XXXX      DLSw: Switch-to-Switch Protocol                June 1994

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
   3  | Receive CANUREACH_cs | DLC_START_DL        | RESOLVE_PENDING      |
      +----------------------+---------------------+----------------------+
   3  | Receive ICANREACH_cs | Send REACH_ACK,     | CIRCUIT_ESTABLISHED  |
      |                      | DLC_RESOLVE_R       |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
   3  | Receive NETBIOS_NQ_cs| DLC_DGRM            | RESOLVE_PENDING      |
      +----------------------+---------------------+----------------------+
   3  | Receive NETBIOS_NR_cs| Send REACH_ACK,     | CIRCUIT_ESTABLISHED  |
      |                      | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
   3  | DLC_RESOLVE_C        | Send CANUREACH_ex   |                      |
      +----------------------+---------------------+----------------------+
   3  | DLC_XID              | If source route     | If CANUREACH_cs was  |
   3  |                      | bridged frame with  | sent:                |
   3  |                      | broadcast indicated:|   CIRCUIT_START      |
   3  |                      |   Send CANUREACH_ex |                      |
   3  |                      | else:               |                      |
   3  |                      |   Send CANUREACH_cs |                      |
   3  |                      |   START_CS_TIMER    |                      |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | If NETBIOS          |                      |
      |                      | NAME_QUERY:         |                      |
   3  |                      |  Send NETBIOS_NQ_ex |                      |
      |                      | else:               |                      |
      |                      |  Send DATAFRAME     |                      |
      +----------------------+---------------------+----------------------+
   3  | DLC_CONTACTED        | Send CANUREACH_cs   | CIRCUIT_START        |
   3  +----------------------+---------------------+----------------------+

   It is assumed that each Data Link Switch will build a set of topology tables
   giving the identity of each Data Link Switch that can reach a specific MAC
   address or a specific NetBIOS name.  This table can be built based upon the
   origin address information received within the CANUREACH message or NETBIOS_NQ
   message and the target address information within the ICANREACH message or
   NETBIOS_NR message.  As a consequence, the amount of search traffic can be kept
   to a minimum.

   Upon receipt of a Test command or XID command to the null SAP (i.e.,
   DLC_RESOLVE_C signal from DLC), the Data Link Switch will check the topology
   table prior to sending the CANUREACH message.  If the target MAC address is in
   the table, the CANUREACH message will be sent to only those Data Link Switches
   that are known to be able to reach the given MAC address.  If the MAC address
   is not in the table, the CANUREACH message will be sent to all known Data Link
   Switches.  Since the destination link SAP (DSAP) value is null, the Target Link

A.K. Bartky                                                  [Page 49]RFC XXXX      DLSw: Switch-to-Switch Protocol                June 1994

   SAP field in the CANUREACH message header is set equal to the Origin Link SAP
   value.

   Upon receipt of a NB_Name_Query the Data Link Switch will check the topology
   table prior to sending the NETBIOS_NQ message.  If the target NetBIOS name is
   in the table, the NETBIOS_NQ message will be sent to only those Data Link
   Switches that are known to be able to reach the given NetBIOS name.  If the
   NetBIOS name is not in the table, the NETBIOS_NQ message will be sent to all
   known Data Link Switches.

   For SNA, the DISCONNECTED state is exited upon receipt of a CANUREACH message
   by a prospective target Data Link Switch, or upon receipt of an ICANREACH
   message by the origin Data Link Switch.  In the former case, the Data Link
   Switch will issue a Test command to the target station (i.e., DLC_START_DL
   signal is presented to DLC).  In the later case, a Test response is sent to the
   origin station (i.e., DLC_RESOLVE_R will be issued) and a REACH_ACK message
   will be returned to the target Data Link Switch.

     Note 1-  Some implementations will not send a Test response, but will send a
     Test command to the station that originated the resolve procedure (i.e., a
     DLC_START_DL will be issued) in order to start the data link.

   For NetBIOS, the DISCONNECTED state is exited upon the receipt of a NETBIOS_NQ
   message by the prospective target Data Link Switch, or upon the receipt of a
   NETBIOS_NR message by the origin Data Link Switch.  In the former case, the
   Data Link Switch will send a NB_Name_Query frame.  In the later case, the Data
   Link Switch will send a NB_Name_Recognized frame to the origin station and a
   REACH_ACK message will be returned to the target Data Link Switch.

     Note 2-  Some implentations will also send a Test command (i.e., a
     DLC_START_DL will be issued) to the station that originated the name
     resolution in order to start the data link.

4.2.2.2 RESOLVE_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_DL_STARTED       | Send ICANREACH      | CIRCUIT_PENDING      |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            |                     | DISCONNECTED         |
      +----------------------+---------------------+----------------------+
   3  | DLC_DGRM             | Send DATAFRAME      |                      |
      +----------------------+---------------------+----------------------+

   The RESOLVE_PENDING state is entered upon receipt of a CANUREACH message or a
   NETBIOS_NQ message by the target DLS.  In the former case, a data link is

A.K. Bartky                                                  [Page 50]RFC XXXX      DLSw: Switch-to-Switch Protocol                June 1994

   started, causing a Test command to be sent by the DLC.  In the later case, a
   NB_Name_Query frame is sent.  This frame is directed to a group MAC address.

   Any CANUREACH messages received in the RESOLVE_PENDING state will be responded
   to if a DLC_DL_STARTED signal is received.  The Data Link Switch may also
   update its topology information based upon the origin MAC address information
   in each CANUREACH message.

   Upon the receipt of a DLC_DL_STARTED signal in the RESOLVE_PENDING state, the
   Data Link Switch may update its topology table base upon the remote MAC address
   information.  The ICANREACH message should be returned to all Data Link
   Switches that had sent a CANUREACH message.  In a similar fashion, the Data
   Link Switch may update its topology table upon the receipt of a
   NB_Name_Recognized frame and a NETBIOS_NR message will be returned to all Data
   Link Switches that have sent a NETBIOS_NQ message.

   The RESOLVE_PENDING state is exited once the data link has been started (i.e.,
   a DLC_DL_STARTED signal is received as a result of a Test response received by
   the DLC) or a NB_Name_Recognized frame is received (i.e., a DLC_DGRM signal is
   received).  The target Data Link Switch will then enter the CIRCUIT_PENDING
   state.

     Note:  Some implentations will also send a Test command in order to start the
     data link to the station that responded to the Name Query frame (i.e., a
     DLC_START_DL will be issued).

A.K. Bartky                                                  [Page 51]RFC XXXX      DLSw: Switch-to-Switch Protocol                June 1994

4.2.2.3. CIRCUIT_START State
   3
   3  +----------------------+---------------------+----------------------+
   3  |        Event         |      Action(s)      |      Next State      |
   3  +----------------------+---------------------+----------------------+
   3  | Receive CANUREACH_cs | If origin MAC addr  | If DLC_START_DL      |
   3  | for circuit in       | in CANUREACH_cs is  | issued:              |
   3  | opposite direction   | greater than origin |   RESOLVE_PENDING    |
   3  |                      | MAC addr of circuit:|                      |
   3  |                      |   DLC_START_DL      |                      |
   3  |                      | else:               |                      |
   3  |                      |   no action taken   |                      |
   3  +----------------------+---------------------+----------------------+
   3  | Receive ICANREACH_cs | Send REACH_ACK,     | If Connected:        |
   3  |                      | If Connected:       |  CONNECT_PENDING,    |
   3  |                      |  Send CONTACT       | else:                |
   3  |                      | else:               |  CIRCUIT_ESTABLISHED |
   3  |                      |  no action taken    |                      |
   3  |                      |                     |                      |
   3  +----------------------+---------------------+----------------------+
   3  | DLC_DGRM             | Send DATAFRAME      |                      |
   3  +----------------------+---------------------+----------------------+
   3  | CS_TIMER_EXP         |                     | DISCONNECTED         |
   3  +----------------------+---------------------+----------------------+

A.K. Bartky                                                  [Page 52]RFC XXXX      DLSw: Switch-to-Switch Protocol                June 1994

4.2.2.4 CIRCUIT_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive CONTACT      | DLC_CONTACT         | CONTACT_PENDING      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | DLC_HALT_DL         | HALT_PENDING         |
      +----------------------+---------------------+----------------------+
   1  | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive REACH_ACK    | If Connected:       | If Connected:        |
      |                      |  Send CONTACT       |  CONNECT_PENDING,    |
      |                      |                     | else:                |
      |                      |                     |  CIRCUIT_ESTABLISHED |
      +----------------------+---------------------+----------------------+
      | Receive XIDFRAME     | DLC_XID             |                      |
      +----------------------+---------------------+----------------------+
      | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
   3  | DLC_CONTACTED        | If UA is sent in    |                      |
   3  |                      | response to SABME:  |                      |
   3  |                      |   DLC_ENTER_BUSY    |                      |
   3  |                      | else:               |                      |
   3  |                      |   no action taken   |                      |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
      | DLC_XID              | Send XIDFRAME       |                      |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
   3  | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CIRCUIT_PENDING state is entered by the target Data Link Switch following
   the sending of an ICANREACH message or the sending of a NETBIOS_NR message.  In
   this state it is awaiting the reception of a REACH_ACK message from the origin
   Data Link Switch.  If a connection does not exist with the target station
   (i.e., the normal case), the Data Link Switch will enter the
   CIRCUIT_ESTABLISHED state.

   If the target Data Link Switch happens to receive a SABME command from the
   target station while in the CIRCUIT_PENDING state (i.e., a DLC_CONTACTED signal
   received from the DLC), the reception of the REACH_ACK message will cause the
   Data Link Switch to enter the CONNECT_PENDING state and to send a CONTACT

A.K. Bartky                                                  [Page 53]RFC XXXX      DLSw: Switch-to-Switch Protocol                June 1994

   message to the other Data Link Switch.  Thus the target Data Link Switch has
   assumed the role of the origin Data Link Switch.

4.2.2.5 CONNECT_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
   3  | Receive CONTACTED    | If UA was sent in   | CONNECTED            |
   3  |                      | response to SABME:  |                      |
   3  |                      |   DLC_EXIT_BUSY     |                      |
   3  |                      | else:               |                      |
   3  |                      |   DLC_CONTACT       |                      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | DLC_HALT_DL         | HALT_PENDING         |
      +----------------------+---------------------+----------------------+
   1  | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
   1  | Receive ICANREACH    | Send HALT_DL_NOACK  |                      |
      +----------------------+---------------------+----------------------+
   1  | Receive NETBIOS_NR   | Send HALT_DL_NOACK  |                      |
      +----------------------+---------------------+----------------------+
      | DLC_RESET            | Send RESTART_DL     | CIRCUIT_RESTART      |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
   3  | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CONNECT_PENDING state is entered by the origin Data Link Switch when a
   DLC_CONTACTED signal has been received from the DLC (i.e., a SABME command has
   been received).  A CONTACT message is then issued.  The state is exited upon
   the receipt of a CONTACTED message from the target Data Link Switch.  If a
   DLC_RESET signal is received, the local data link is restarted and a RESTART_DL
   message is sent to the remote DLS.

     Note:  Some implementations will also send a Test command in order to restart
     the data link to the station that sent the SABME command (i.e., a
     DLC_START_DL will be issued).

A.K. Bartky                                                  [Page 54]RFC XXXX      DLSw: Switch-to-Switch Protocol                June 1994

4.2.2.6 CIRCUIT_ESTABLISHED State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive CONTACT      | DLC_CONTACT         | CONTACT_PENDING      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | DLC_HALT_DL         | HALT_PENDING         |
      +----------------------+---------------------+----------------------+
   1  | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive XIDFRAME     | DLC_XID             |                      |
      +----------------------+---------------------+----------------------+
      | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
   1  | Receive ICANREACH    | Send HALT_DL_NOACK  |                      |
      +----------------------+---------------------+----------------------+
   1  | Receive NETBIOS_NR   | Send HALT_DL_NOACK  |                      |
      +----------------------+---------------------+----------------------+
      | DLC_CONTACTED        | Send CONTACT        | CONNECT_PENDING      |
   3  |                      | If UA is sent in    |                      |
   3  |                      | response to SABME:  |                      |
   3  |                      |   DLC_ENTER_BUSY    |                      |
   3  |                      | else:               |                      |
   3  |                      |   no action taken   |                      |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | DLC_XID              | Send XIDFRAME       |                      |
      +----------------------+---------------------+----------------------+
   3  | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CIRCUIT_ESTABLISHED state is entered by the origin Data Link Switch from
   the DISCONNECTED state, and by the target Data Link Switch from the
   CIRCUIT_PENDING state.  The state is exited when a connection is started (i.e.,
   DLC receives a SABME command).  The next state is CONTACT_PENDING for the
   target Data Link Switch and CONNECT_PENDING for the origin Data Link Switch.

A.K. Bartky                                                  [Page 55]RFC XXXX      DLSw: Switch-to-Switch Protocol                June 1994

4.2.2.7 CONTACT_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | DLC_HALT_DL         | HALT_PENDING         |
      +----------------------+---------------------+----------------------+
   1  | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive RESTART_DL   | DLC_HALT_DL         | RESTART_PENDING      |
      +----------------------+---------------------+----------------------+
      | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_CONTACTED        | Send CONTACTED      | CONNECTED            |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
   3  | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CONTACT_PENDING state is entered by the target Data Link Switch upon the
   receipt of a CONTACT message.  This causes the Data Link Switch to issue a
   DLC_CONTACT signal to the DLC (i.e., DLC sends a SABME command).  This state is
   then exited upon the receipt of a DLC_CONTACTED signal from the DLC (i.e., a UA
   response received).

   If a RESTART_DL message is received, indicating that the remote Data Link
   Switch has received a DLC_RESET signal, the local Data Link Switch will send a
   DISC command frame on the adjacent LAN (i.e., DLC_HALT_DL signal) and enter the
   RESTART_PENDING state.

A.K. Bartky                                                  [Page 56]